package com.tinckay.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tinckay.entity.dto.StorehousePlanDto;
import com.tinckay.entity.po.StorehousePlan;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 仓体浇筑计划 Mapper 接口
 * </p>
 *
 * @author Jean
 * @since 2018-11-06
 */
public interface StorehousePlanMapper extends BaseMapper<StorehousePlan> {

    /**
     * 历史任务分页查询
     *
     * @param page
     * @param barnNo
     * @param pumpCode
     * @param startATime
     * @param endBTime
     * @return
     */
    IPage<StorehousePlanDto> findByPage(@Param("page") Page<StorehousePlan> page,
                                        @Param("barnNo") String barnNo,
                                        @Param("pumpCode") String pumpCode,
                                        @Param("startATime") String startATime,
                                        @Param("endBTime") String endBTime);

    /**
     * 查询浇筑时间最大序号
     *
     * @param planTime
     * @return
     */
    Integer selectMaxPourNo(@Param("planTime") LocalDate planTime);


    /**
     * 调整浇筑序号
     *
     * @param adjustPourNo
     * @param planTime
     */
    void subPourNo(@Param("adjustPourNo") Integer adjustPourNo, @Param("planTime") LocalDate planTime);

    /**
     * 调整浇筑序号
     *
     * @param adjustPourNo
     * @param planTime
     */
    void addPourNo(@Param("adjustPourNo") Integer adjustPourNo, @Param("planTime") LocalDate planTime);

    /**
     * 浇筑计划统计查询
     *
     * @param storeCodes
     * @return
     */
    List<Map<String, Object>> countPlan(@Param("storeCodes") List<String> storeCodes);

    /**
     * 浇筑计划详情(带统计)
     *
     * @param storeCode
     * @return
     */
    StorehousePlan storehousePlanInfo(@Param("storeCode") String storeCode);

    /**
     * 按年月日统计已完成浇筑浇筑计划信息
     *
     * @param statisticalFlag
     * @param startPlanTime
     * @param endPlanTime
     * @return
     */
    List<Map<String, Object>> statistical(@Param("statisticalFlag") int statisticalFlag, @Param("startPlanTime") String startPlanTime, @Param("endPlanTime") String endPlanTime);

    /**
     * 条件查询浇筑计划列表
     *
     * @param barnNo
     * @param pumpCode
     * @param planTime
     * @param storeState
     * @return
     */
    List<StorehousePlan> findList(@Param("barnNo") String barnNo, @Param("pumpCode") String pumpCode, @Param("planTime") String planTime, @Param("storeState") Integer storeState);

}
